home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 10
/
AACD 10.iso
/
AACD
/
Online
/
SpeakFreely
/
src
/
lpc10
/
synths.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-05-18
|
1KB
|
57 lines
/******************************************************************
*
* SYNTHS Version 48
*
******************************************************************
*
* NOTE: There is excessive buffering here, BSYNZ and DEEMP should be
* changed to operate on variable positions within SOUT. Also,
* the output length parameter is bogus, and PITSYN should be
* rewritten to allow a constant frame length output
*/
#include "config.ch"
#include "lpcdefs.h"
#include "contrl.ch"
extern int ipiti[11], ivuv[11];
extern float rci[MAXORD][11], rmsi[11], pc[MAXORD];
extern float exc[MAXPIT+MAXORD], exc2[MAXPIT+MAXORD], noise[MAXPIT+MAXORD];
synths(voice, pitch, rms, rc, speech, k )
int voice[], *pitch;
float rc[], *rms;
float speech[];
int *k;
{
int i, j, nout;
float ratio, g2pass;
static float sout[MAXFRM];
float gprime=0.7;
*pitch = mmax(mmin(*pitch,156),20);
for (i = 1; i<=ORDER;i++)
rc[i] = mmax(mmin(rc[i],.99),-.99);
*k = 0;
pitsyn(voice, pitch, rms, rc, ivuv-1, ipiti-1, rmsi-1, rci, &nout, &ratio );
if(nout>0) {
for(j=0;j<nout;j++) {
irc2pc( rci, pc, gprime, &g2pass, j);
bsynz(pc, ipiti[j], ivuv[j], sout, rmsi[j], ratio, g2pass);
deemp0( sout-1, ipiti[j] );
for(i=1;i<=ipiti[j];i++) {
(*k)++;
speech[*k] = sout[i-1]* 0.000244140625;
}
}
}
}